Для построения отчетов в СКАУТ-Платформе используется генератор отчетов Stimulsoft. Отчет Stimulsoft состоит из 2 частей: шаблона отчета и источника данных.
Шаблон отчета (report template) – это xml документ c расширением .mrt. В нем содержится информация о разметке, привязке к источнику данных, зависимостях и т. д.
Источник данных (data source) – это класс .NET содержащий информацию для отображения в отчете.
Подсистема отчетов состоит из 3 частей: серверной, клиентской и инфраструктурной части.
Инфраструктурная часть содержит классы, общие для серверной и клиентской частей подсистемы. В этой части располагаются: классы отчетов, классы настроек отчетов, классы источников данных, классы описатели отчетов и классы сериализации.
Серверная часть содержит классы, необходимые для построения отчета. В этой части располагаются: построитель отчета, построитель статистики (если необходим) и шаблон отчета.
Клиентская часть содержит классы для отображения отчета. В этой части располагаются: классы представлений для редактирования настроек отчета и классы для работы с интерактивностью отчета.
Для демонстрации работы подсистемы отчетов предоставляется тестовое расширение SpfTestPlugin. Расширение SpfTestPlugin добавляет в СКАУТ-Платформу новый отчет «Тестовый Отчет», в нем представлены данные по пробегу объектов мониторинга за заданный промежуток времени.
Части подсистемы отчетов с указанием проектов Visual Studio:
Предлагается создавать новый отчет на основе отчета тестового расширения. Ниже представлен процесс доработки отчета с комментариями по ходу процесса.
Процесс доработки отчета состоит из 3 шагов:
Общий ход доработки отчета следующий. При построении отчета необходимо запросить у ядра СКАУТ-Платформы необходимые данные для построения. На их основе сформировать источник данных отчета, далее, привести в соответствие с источником данных шаблон отчета.
Процесс построения отчета происходит в серверной части подсистемы отчетов. Построением занимается класс (TestReportBuilder тестового расширения), реализующий интерфейс IReportBuilder.
Данные отчета формируются на основе статистик. Статистика – это некоторая готовая аналитика по объекту мониторинга за определенный промежуток времени.
Статистики бывают следующих типов:
В СКАУТ-Платформе есть система диспетчеризации процесса построения статистик. В целях диспетчеризации процесс построения разбит на этапы. Каждый этап построения выполняется как атомарная операция.
Этапы построения статистик:
Поэтапным построением статистик управляет класс StatisticsBuildAdapter, его метод BuildDailyStatistics принимает ряд функций обратного вызова, по одной функции для каждого этапа.
Аргументы BuildDailyStatistics:
Для каждого объекта мониторинга, по которым нужны статистики, в методе initCallBack необходимо создать запрос статистик (StatisticsRequest).
StatisticsRequest в конструкторе принимает 3 параметра:
Для создания StatisticsDefinition необходимо указать Id статистики (Guid) и настройки статистики (класс реализующий IStatisticsSettings), если статистика предполагает настройку. Id статистики можно получить из класса CoreStatisticsId. В нем содержатся идентификаторы всех вышеперечисленных статистик.
Классы настроек статистик – реализации ISatatisticsSettings:
Таким образом, в процесс построения статистики в методах обратного вызова необходимо по кусочкам собирать данные для отчета, сформировать из них источник данных (TestReportDataSource в тестовом расширении). Данные в источнике данных должны быть готовыми для отображения в отчете. Далее источник данных необходимо упаковать в класс, реализующий интерфейс IDataSourceReport (TestReport в тестовом расширении), и положить его в ReportBuildResult.
В классе TestReportStatisticsBuilder тестового расширения показан процесс запроса статистик на примере статистики по пробегу (TrackPeriodsMileageStatistics).
Важно, при изменении классов отчетов (реализующих интерфейс IReport) и классов – источников данных (IReportDataSource), соответственно изменять классы сериализации.
Классы сериализации лежат в инфраструктурной части подсистемы отчетов. Их можно разделить на 2 части: классы для записи и классы для чтения. Принято следующее именование: для классов записи постфикс Writer (TestReportWriter в тестовом расширении), для классов чтения – Reader (TestReportReader).
После доработки построения отчета, сериализаторов и источника данных необходимо доработать шаблон отчета, чтобы он мог показать данные из источника пользователю.
Привязка элементов шаблона к свойствам класса-источника данных происходит по имени. Для привязки используется следующий формат: префикс ReportData, знак подчеркивания «_», имя свойства в источнике данных. Пример из тестового расширения: ReportData_UnitsReports.
Шаблон отчета располагается в серверной части подсистемы отчетов (в тестовом расширении он лежит в директории Reports и называется TestReportTemplate.mrt).
Процесс редактирования шаблона: